home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / boosters.arc / FILLHEAP.ASM < prev    next >
Assembly Source File  |  1985-10-12  |  2KB  |  88 lines

  1. ;*************************************************
  2. ;
  3. ;       Procedure FILLHEAP ( Page : HeapBuf;
  4. ;                            X1,Y1,X2,Y2 : Integer;
  5. ;                            C : Char;
  6. ;                          Att : Byte);
  7. ;
  8. ;       Fills Page of heap with C characters,
  9. ;       of attribute Att,
  10. ;       in screen-image format, beginning at
  11. ;          X1,Y1 (upper left)
  12. ;       through and including
  13. ;          X2,Y2 (lower right).
  14. ;
  15. ;*************************************************
  16. FILLHEAP proc    near
  17.         push    bp
  18.     mov    bp,sp
  19.     push    ds
  20. ;
  21. ;
  22. ;*** Compute number of lines to fill
  23. ;
  24.     mov    ax,[bp+12]    ; value of Y1 into AX
  25.     mov    dx,[bp+08]    ; value of Y2 into CX
  26.         sub     dx,ax           ; DX = Y2 - Y1
  27.     inc    dx        ; DX = Number of lines
  28.     push    dx
  29. ;
  30. ;
  31. ;*** Compute length of each line
  32. ;
  33.     mov    ax,[bp+14]    ;  X1
  34.     mov    cx,[bp+10]    ;  X2
  35.     sub    cx,ax        ;  CX = X2 - X1
  36.     inc    cx        ;  CX = num WORDS/line
  37.     push    cx
  38. ;
  39. ;*** Determine Page of heap to fill
  40. ;
  41.     mov    di,[bp+16]
  42.     mov    ax,[bp+18]
  43.     mov    es,ax
  44. ;
  45. ;*** Compute upper left offset of page
  46. ;
  47.     mov    bx,[bp+12]    ;  Y1
  48.         dec     bx              ;  (Y1-1)
  49.     mov    dx,bx        ;  Save in DX
  50.     mov    cl,7
  51.     shl    dx,cl        ;  (Y1-1) * 128
  52.     mov    cl,5
  53.     shl    bx,cl        ;  (Y1-1) *  32
  54.     add    bx,dx        ;  (Y1-1) * 160
  55.     mov    ax,[bp+14]    ;  X1 into AX
  56.     dec    ax        ;  (X1-1)
  57.     shl    ax,1        ;  2 * (X1-1)
  58.     add    bx,ax        ;  rel offset
  59.     add    di,bx        ;  page offset
  60. ;
  61.     pop    cx        ; Num words/line
  62.     pop    dx        ; Num lines to blank
  63. ;
  64. ;*** Fill page in heap
  65. ;
  66.     mov    ax,[bp+6]    ; get char
  67.     mov    bx,[bp+4]    ; get attribute
  68.     mov    ah,bl
  69.     mov    bx,160
  70.     sub    bx,cx
  71.     sub    bx,cx
  72.     cld
  73. AGAIN:    push    cx
  74. rep    stosw
  75. ;
  76.     pop    cx
  77.     dec    dx
  78.     jz    DONE2
  79.     add    di,bx
  80.     jmp    AGAIN
  81. ;
  82. DONE2:
  83.         pop     ds
  84.         mov     sp,bp
  85.         pop     bp
  86.     ret    16
  87. FILLHEAP  endp
  88.